現在のPlatformターゲットをBuildSettingsではなくスクリプトから切り替える時。 例えば、プラットフォーム設定をScriptableObjectで管理し、スイッチ時にその設定を流し込みたいなどに利用できると思います
Document
https://docs.unity3d.com/ScriptReference/EditorUserBuildSettings.html
切り替え
切り替えに関しては
public static bool SwitchActiveBuildTarget(BuildTargetGroup targetGroup, BuildTarget target);
が利用できます
SwitchActiveBuildTargetAsync というメソッドもありますが、こちらはスイッチ時にコンパイルを走らせるのではなく次回のEditor更新時のタイミングに合わせてスイッチするようです。 おそらく手動で何らかの処理を事前に入れたいときに利用するのでしょうか
設定ファイル
以下のようなScriptableObjectを用意し、Platform変更時に任意なパラメータを追加できるようにしておきます
/// <summary>
/// Platform環境を切り替える設定
/// </summary>
[CreateAssetMenu(menuName = "Core/PlatformSwitcher/Basic PlatformContext", fileName = "Basic PlatformContext")]
public class PlatformContext : ScriptableObject
{
[SerializeField] private string _name;
[SerializeField] private BuildTarget _buildTarget;
public string Name => _name;
public BuildTarget BuildTarget => _buildTarget;
public BuildTargetGroup BuildGroup =>
_buildTarget switch
{
BuildTarget.StandaloneOSX => BuildTargetGroup.Standalone,
BuildTarget.StandaloneWindows => BuildTargetGroup.Standalone,
BuildTarget.StandaloneWindows64 => BuildTargetGroup.Standalone,
BuildTarget.StandaloneLinux64 => BuildTargetGroup.Standalone,
BuildTarget.Android => BuildTargetGroup.Android,
BuildTarget.iOS => BuildTargetGroup.iOS,
BuildTarget.WebGL => BuildTargetGroup.WebGL,
_ => throw new NotImplementedException()
};
}
BuildTargetGroupはBuildTargetから求めることが可能なため、SerializeFieldで可視化せずにプロパティでTargetから取得できるようにしています
後はこの設定を利用し以下のように切り替え
EditorUserBuildSettings.SwitchActiveBuildTarget(context.BuildGroup, context.BuildTarget);
切り替え通知
Platform変更したときの通知は IActiveBuildTargetChanged
を継承すると受けられます
/// <summary>
/// 切り替えたときに呼び出される
/// </summary>
public void OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget newTarget)
{
}
終わり
EditorWindowと組み合わせて、特定の項目をダブルクリックした時にその項目の設定を適用してから SwitchActiveBuildTarget
でターゲットを切り替えが主な使い道になるかと思います
4AE.gif)